<?php

// load error handling module 
require_once('error_handler.php');
// load configuration file 
require_once('config.php');

// class supports server-side suggest & autocomplete functionality 
class Suggest {

    // database handler 
    private $mMysqli;

    // constructor opens database connection 
    function __construct() {
        // connect to the database 
        $this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD,
                        DB_DATABASE);
    }

    // destructor, closes database connection   
    function __destruct() {
        $this->mMysqli->close();
    }

    // returns all PHP functions that start with $keyword 
    public function getSuggestions($keyword) {
        // escape the keyword string       
        $patterns = array('/\s+/', '/"+/', '/%+/');
        $replace = array('');
        $keyword = preg_replace($patterns, $replace, $keyword);
        // build the SQL query that gets the matching functions from the database 
        if ($keyword != '')
            $query = 'SELECT schrijver ' .
                    'FROM suggest2012 ' .
                    'WHERE schrijver LIKE "' . $keyword . '%"' .
                    'GROUP BY schrijver';
        // if the keyword is empty build a SQL query that will return no results 
        else
            $query = 'SELECT schrijver ' .
                    'FROM suggest2012 ' .
                    'WHERE schrijver=""';
        // execute the SQL query y
        $result = $this->mMysqli->query($query);
        // build the XML response 
        $output = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
        $output .= '<response>';
        // if we have results, loop through them and add them to the output 
        if ($result->num_rows) {
            while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $schrijver = str_replace("&", "&amp;", $row['schrijver']);
                
                $output .= '<name>' . $schrijver . '</name>';
            }
        }
        // close the result stream  
        $result->close();
        // add the final closing tag 
        $output .= '</response>';
        // return the results 
        return $output;
    }

//end class Suggest 
}

?>